/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.gui;

import com.camachosanchez.bean.Pilotos;
import com.camachosanchez.controler.jdbc.PilotosJdbcControler;
import com.camachosanchez.controler.jpa.PilotosJpaController;
import com.camachosanchez.gui.table.ModeloTablaPilotos;
import com.camachosanchez.gui.table.RenderizadorTabla;
import com.camachosanchez.gui.table.TableSorter;
import com.camachosanchez.util.EstadosJDialog.EstadoJDialog;
import com.camachosanchez.util.GUIUtil;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.WindowConstants;
import javax.swing.event.InternalFrameEvent;
import net.coderazzi.filters.gui.TableFilterHeader;

/**
 *
 * @author Zully
 */
public class MaestroPilotos extends javax.swing.JInternalFrame {

    private ModeloTablaPilotos modelo;
    private TableFilterHeader filterHeader;

    /**
     * Creates new form MaestroPilotos
     */
    public MaestroPilotos() {
        initComponents();
        modelo = new ModeloTablaPilotos();
        TableSorter tableSorter = new TableSorter(modelo, tablaPilotos.getTableHeader());
        tablaPilotos.setModel(tableSorter);
        filterHeader = new TableFilterHeader();
        filterHeader.setTable(tablaPilotos);
        RenderizadorTabla render = new RenderizadorTabla();
        tablaPilotos.setDefaultRenderer(String.class, render);
        this.llenarPilotos();
        this.setSize(670, 400);
        tablaPilotos.getTableHeader().setReorderingAllowed(false);
        setFrameIcon(new ImageIcon(getClass().getResource("/com/camachosanchez/recursos/table.png")));
        GUIUtil.fondoBarraHerramientas(jToolBar1);
        this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        this.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() {

            @Override
            public void internalFrameClosing(InternalFrameEvent e) {
                cerrar();
            }
        });
    }

    private void cerrar() {
        GUIUtil.maximizarTodasLasVentanas(this);
    }

    private void setColumnaOculta() {
        tablaPilotos.getColumnModel().getColumn(1).setMinWidth(0);
        tablaPilotos.getColumnModel().getColumn(1).setMaxWidth(0);
        tablaPilotos.getColumnModel().getColumn(1).setPreferredWidth(0);
    }

//    private void setAnchoColumnas() {
//        int anchoColumna = 0;
//        TableColumnModel modeloColumna = jTablePilotos.getColumnModel();
//        TableColumn columnaTabla;
//        for (int i = 0; i < jTablePilotos.getColumnCount(); i++) {
//            columnaTabla = modeloColumna.getColumn(i);
//            switch (i) {
//                case 0:
//                    anchoColumna = 25;
//                    columnaTabla.setMinWidth(anchoColumna);
//                    columnaTabla.setMaxWidth(anchoColumna);
//                    columnaTabla.setPreferredWidth(anchoColumna);
//                    break;
//                case 1:
//                    anchoColumna = 0;
//                    columnaTabla.setMinWidth(anchoColumna);
//                    columnaTabla.setMaxWidth(anchoColumna);
//                    columnaTabla.setPreferredWidth(anchoColumna);
//                    break;
//                case 2:
//                case 3:
//                    anchoColumna = 120;
////                    columnaTabla.setMinWidth(anchoColumna);
////                    columnaTabla.setMaxWidth(anchoColumna);
//                    columnaTabla.setPreferredWidth(anchoColumna);
//                    break;
//                case 4:
//                    anchoColumna = 70;
////                    columnaTabla.setMinWidth(anchoColumna);
////                    columnaTabla.setMaxWidth(anchoColumna);
//                    columnaTabla.setPreferredWidth(anchoColumna);
//                    break;
//                case 5:
//                    anchoColumna = 120;
////                    columnaTabla.setMinWidth(anchoColumna);
////                    columnaTabla.setMaxWidth(anchoColumna);
//                    columnaTabla.setPreferredWidth(anchoColumna);
//                    break;
////                case 6:
////                    anchoColumna = 80;
////                    break;
//            }
//        }
//    }
    public void llenarPilotos() {
        modelo.limpiar();
        PilotosJdbcControler daoJdbc = new PilotosJdbcControler();
        List<Pilotos> pilotos = daoJdbc.findAll();
        for (Pilotos p : pilotos) {
            modelo.agregarPiloto(p);
        }
        GUIUtil.SetAnchoColumnas(tablaPilotos);
        setColumnaOculta();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tablaPilotos = new javax.swing.JTable();
        jToolBar1 = new javax.swing.JToolBar();
        jPanel2 = new javax.swing.JPanel();
        btnNuevo = new javax.swing.JButton();
        btnModificar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();

        setClosable(true);
        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
        setIconifiable(true);
        setMaximizable(true);
        setResizable(true);
        setTitle(".:: Pilotos ::.");
        setPreferredSize(new java.awt.Dimension(847, 500));

        jPanel1.setLayout(new java.awt.BorderLayout());

        tablaPilotos.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(156, 161, 165)));
        tablaPilotos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        tablaPilotos.setRowHeight(22);
        tablaPilotos.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        tablaPilotos.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaPilotosMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(tablaPilotos);

        jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        jToolBar1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jToolBar1.setFloatable(false);
        jToolBar1.setRollover(true);

        jPanel2.setBackground(new java.awt.Color(255, 255, 255));
        jPanel2.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 4, 4));

        btnNuevo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_new.png"))); // NOI18N
        btnNuevo.setToolTipText("Nuevo");
        btnNuevo.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnNuevo.setFocusable(false);
        btnNuevo.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnNuevo.setMaximumSize(new java.awt.Dimension(22, 22));
        btnNuevo.setMinimumSize(new java.awt.Dimension(22, 22));
        btnNuevo.setPreferredSize(new java.awt.Dimension(22, 22));
        btnNuevo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnNuevo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNuevoActionPerformed(evt);
            }
        });
        jPanel2.add(btnNuevo);

        btnModificar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_edit.png"))); // NOI18N
        btnModificar.setToolTipText("Modificar");
        btnModificar.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnModificar.setFocusable(false);
        btnModificar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnModificar.setMaximumSize(new java.awt.Dimension(22, 22));
        btnModificar.setMinimumSize(new java.awt.Dimension(22, 22));
        btnModificar.setPreferredSize(new java.awt.Dimension(22, 22));
        btnModificar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModificarActionPerformed(evt);
            }
        });
        jPanel2.add(btnModificar);

        btnEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_delete.png"))); // NOI18N
        btnEliminar.setToolTipText("Eliminar");
        btnEliminar.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnEliminar.setFocusable(false);
        btnEliminar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnEliminar.setMaximumSize(new java.awt.Dimension(22, 22));
        btnEliminar.setMinimumSize(new java.awt.Dimension(22, 22));
        btnEliminar.setPreferredSize(new java.awt.Dimension(22, 22));
        btnEliminar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });
        jPanel2.add(btnEliminar);

        jToolBar1.add(jPanel2);

        getContentPane().add(jToolBar1, java.awt.BorderLayout.PAGE_START);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void tablaPilotosMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaPilotosMouseClicked
        // TODO add your handling code here:
//        if (evt.getClickCount() == 2) {
//            int fila = jTablePilotos.rowAtPoint(evt.getPoint());
//            int id = modelo.obtenerId(fila);
//            PilotosJpaController dao_piloto = new PilotosJpaController(null);
//            EditorPiloto editor = new EditorPiloto(this, Principal.getInstance(), true, dao_piloto.findPilotos(id), fila);
//            editor.setEstado(EstadoJDialog.MODIFICAR);
//            editor.setVisible(true);
//        }
    }//GEN-LAST:event_tablaPilotosMouseClicked

    private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNuevoActionPerformed
        // TODO add your handling code here:
        EditorPiloto registro = new EditorPiloto(this, Principal.getInstance(), true, null, 0);
        registro.setEstado(EstadoJDialog.NUEVO);
        registro.setVisible(true);
    }//GEN-LAST:event_btnNuevoActionPerformed

    private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModificarActionPerformed
        // TODO add your handling code here:
        int fila = tablaPilotos.getSelectedRow();
        if (fila > -1) {
            int id = Integer.parseInt(tablaPilotos.getValueAt(fila, 1).toString());
            PilotosJpaController dao_piloto = new PilotosJpaController(null);
            EditorPiloto editor = new EditorPiloto(this, Principal.getInstance(), true, dao_piloto.findPilotos(id), fila);
            editor.setEstado(EstadoJDialog.MODIFICAR);
            editor.setVisible(true);
        } else {
            JOptionPane.showMessageDialog(this, "Debe seleccionar un piloto.", "Advertencia", JOptionPane.WARNING_MESSAGE);
        }
    }//GEN-LAST:event_btnModificarActionPerformed

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
        // TODO add your handling code here:
        int fila = tablaPilotos.getSelectedRow();
        if (fila > -1) {
            if (JOptionPane.showConfirmDialog(null, "¿Está seguro que desea eliminar el piloto seleccionado?", "Confirmación", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
                int id = Integer.parseInt(tablaPilotos.getValueAt(fila, 1).toString());
                PilotosJdbcControler daoJdbc = new PilotosJdbcControler();
                byte estado = daoJdbc.eliminarPiloto(id);
                if (estado == 1) {
                    JOptionPane.showMessageDialog(this, "El piloto se encuentra relacionado con otros registros, no puede ser eliminado.", "Error en la eliminación", JOptionPane.ERROR_MESSAGE);
                } else {
                    JOptionPane.showMessageDialog(this, "El piloto se ha eliminado de forma segura.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
                    this.borrarPiloto(fila);
                }
            }
        } else {
            JOptionPane.showMessageDialog(this, "Debe seleccionar un piloto.", "Advertencia", JOptionPane.WARNING_MESSAGE);
        }
    }//GEN-LAST:event_btnEliminarActionPerformed

//    public void actualizarFila(Pilotos piloto, int fila) {
//        modelo.actualizarPiloto(piloto, fila);
//        jTablePilotos.updateUI();
//    }
//
//    public void agregarFila(Pilotos piloto) {
//        modelo.agregarPiloto(piloto);
//        jTablePilotos.updateUI();
//    }
    public void borrarPiloto(int fila) {
        modelo.borrarAccion(fila);
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnModificar;
    private javax.swing.JButton btnNuevo;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JTable tablaPilotos;
    // End of variables declaration//GEN-END:variables
}
